package com.blog.common.mapper.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.blog.common.domain.entity.Article;
import com.blog.common.domain.dto.ConditionDto;
import com.blog.common.domain.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.io.Serializable;
import java.util.List;

/**
 * <p>
 * 文章 Mapper 接口
 * </p>
 *
 * @author Valerie
 * @since 2023-02-18
 */
@Mapper
public interface ArticleMapper extends BaseMapper<Article> {

    /**
     * 查看首页文章
     * @param page 分页信息
     * @return List<ArticleHomeVo>
     */
    Page<ArticleHomeVo> selectArticleHomeVoList(Page<ArticleHomeVo> page);

    /**
     * 根据条件查询文章
     *
     * @param limitPageSize   页码
     * @param pageSize      大小
     * @param condition 条件
     * @return 文章列表
     */
    List<ArticlePreviewVo> listArticlesByCondition(@Param("limitPageSize") Long limitPageSize, @Param("pageSize") Long pageSize, @Param("condition") ConditionDto condition);

    /**
     * 根据id查询文章
     *
     * @param articleId 文章id
     * @return 文章信息
     */
    ArticleVo getArticleById(@Param("articleId") Serializable articleId);

    /**
     * 查看文章的推荐文章
     *
     * @param articleId 文章id
     * @return 文章列表
     */
    List<ArticleRecommendVo> listRecommendArticles(@Param("articleId") Serializable articleId);

    /**
     * 根据时间查询归档
     *
     * @param pageSize 条数
     * @return {@link List< ArchiveSideVo>}
     */
    List<ArchiveSideVo> listArchiveByDate(@Param("pageSize") Long pageSize);

    /**
     * 查询后台文章
     *
     * @param current   页码
     * @param size      大小
     * @param condition 条件
     * @return 文章列表
     */
    List<ArticleBackVo> listArticleBacks(@Param("current") Long current, @Param("size") Long size, @Param("condition") ConditionDto condition);

    /**
     * 根据id查询文章
     *
     * @param id
     * @return {@link ArticleInfoVo}
     */
    ArticleInfoVo getArticleInfoById(@Param("id") Serializable id);

    /**
     * 根据分类id查询文章
     *
     * @param categoryId 分类id
     * @return {@link List<ArticleHomeVo>}
     */
    List<ArticleHomeVo> listArticlesByCategory(@Param("categoryId") Serializable categoryId);

    /**
     * 根据标签id查询文章
     *
     * @param tagId 标签id
     * @return {@link List<ArticleHomeVo>}
     */
    List<ArticleHomeVo> listArticlesByTag(@Param("tagId") Serializable tagId);

    /**
     * 搜索文章
     *
     * @param keywords 关键词
     * @return {@link List< ArticleSearchVo>}
     */
    List<ArticleSearchVo> listArticlesBySearch(@Param("keywords") Serializable keywords);


    /**
     * 搜索文章
     *
     * @param keywords 关键词
     * @param page 分页
     * @return {@link Page< ArticleSearchVo>}
     */
    Page<ArticleSearchVo> listArticlesBySearchAndPage(@Param("keywords") Serializable keywords, Page page);
}
